import random

import matplotlib
from matplotlib import font_manager
from matplotlib import pyplot as plt

# 设置展示中文字体的第一种方法,只试用于Window和Linuex
# 这段代码在源码中拿就可以了
font = {'family': 'MicroSoft YaHei',
        'weight': 'bold',
        'size': 'larger'}
# **的意思就是把字典转换成A:B
# matplotlib.rc('font', **font)
# 上面的代码可以写成
matplotlib.rc('font', family='MicroSoft YaHei')

# 设置展示中文字体的第二种方法,只试用于所有系统
font_manager.FontProperties(fname='./本地字体路径')


# 10点到12点每分钟的气温
x = range(120)  # range是无法取步长的,只有列表才可以取步长,所以到后期需要list(x)进行转换
y = [random.randint(25, 30) for i in range(120)]
# 设置尺寸
plt.figure(figsize=(20, 10), dpi=80)
plt.plot(x, y, label="昨天", color='orange', linestyle=':')  # label是标签的意思 color是颜色的意思 linestyle线条样式:是虚线
y1 = [random.randint(25, 30) for i in range(120)]
# 如果要看两条线的差异的话,plot两次即可
# 这里的时间是相同的,只有温度不同,座椅只需要修改Y即可
plt.plot(x, y1, label='今天', color='cyan', linestyle='--')  # linestyle线条样式:是点线

# 这里显示12个+12个是24个
# xx = [f'10点{i}分' for i in list(x)[::10]]
# xx += [f'11点{i}分' for i in list(x)[::10]]
# print(xx)
# plt.xticks(list(x)[::10], xx) ##这里会报错,因为前面是10个,后面是24个
# plt.xticks(list(x)[::5], xx) ##这里改为5,120/5就是24个了,就不会报错了

# 这里显示60个+60个是120个
xx = [f'10点{i}分' for i in range(60)]
xx += [f'11点{i}分' for i in range(60)]

# 前后两个值要对应,前面多少个,后面就需要多少个
# 一个参数的时候是刻度,数字
# 两个参数的时候前面是数字,后面是字符串,这样对应起来
plt.xticks(list(x)[::10], xx[::10], rotation=45)  # rotation旋转的意思

# 添加描述信息
plt.xlabel('时间 (单位:时/分)')
plt.ylabel('温度 (单位:°)')
plt.title('10点到12点的温度变化情况统计图')

# 设置网格线
plt.grid(alpha=0.4)  # alpha透明度的意思0到1之间

# 设置图例
plt.legend(loc=0)  # 这里可以指定图例的位置loc
# 存储图片
plt.savefig('./1.png')
# 展示图片
plt.show()
# 学习总结
# 1 绘制折线图(plt.plot)
# 2 设置图片的大小和分辨率(plt.figure)
# 3 实现了图片的保存(plt.savefig)
# 4 设置X轴Y轴的字刻度和字符串(plt.xticks)
# 5 解决了刻度稀疏和密度的问题(plt.xticks)
# 6 设置了标题,XY轴的label(title,xlabel)
# 7 设置了字体(rc,font_manager)
# 8 在一个图上绘制多个图形(plt多次plot即可)
# 9 为不同的图形添加图例

# 以上是必须掌握的,其他加水印加线条,百度下就可以了
